package com.webmall.dao;

import java.sql.*;

/**
 * 数据库基本操作
 * 连接
 * 关闭
 * 通用操作：增删改查
 * **均设成静态 防止出错

 */

public class BaseDao {

    static {//加载驱动
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//还需要下载驱动
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

    //获取连接
    public static Connection getConn(){

        //创建连接对象
        Connection connection=null;

        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/webmall?useSSL=false&serverTimezone=UTC","root","123456");

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return connection;
    }



    //增删改查 返回值为操作影响的行数
    public static int sqlOperat(String sql,Object[] params){
        int count = 0;

        //1获取连接
        Connection connection = BaseDao.getConn();
        //2准备sql语句进行操作

        PreparedStatement ps = null;
        //借助这个准备
        //例如：insert into user(''''','') value(?,?,?)--后面的value通过params进行绑定，？相当于占位符
        try {
            ps = connection.prepareStatement(sql);

            //3.进行参数绑定
            for (int i=0;i<params.length;i++){
                ps.setObject(i+1,params[i]);
            }
            //4.执行操作
            count =ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            BaseDao.closeSql(null,ps,connection);

        }

        return count;
    }

    //关闭连接--假设存在返回结果集的操作
    public static void closeSql(ResultSet set,PreparedStatement ps,Connection connection){

        try {
        if (null!=set){//结果集

                set.close();

        }else if(null != ps){//预处理对象

            ps.close();
        }else if (null!=connection){//连接对象

            connection.close();
        }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}
